草庐IT

javascript oop、instanceof 和基类

全部标签

c++ - 判断一个抽象基类的构造函数是否为noexcept?

在C++11及以后,如何判断抽象基类的构造函数是否为noexcept?以下方法无效:#include#include#includestructBase{Base()noexcept;virtualintf()=0;};//staticassertionfails,because!std::is_constructible::value:static_assert(std::is_nothrow_constructible::value,"");//staticassertionfails,because!std::is_constructible::value:static_asse

c++ - 如果基类是成员函数的参数类型,是否需要指定基类的模板参数?

以下代码被VC++2013接受,但被clang3.4拒绝。哪个编译器符合C++标准?templatestructA{Tn;};templatestructB:A{//VC++2013:OK//clang:error:useofclasstemplate'A'requirestemplateargumentsB&f1(constA&obj){return*this;}//VC++:OK//clang:OKB&f2(constA&obj){return*this;}};intmain(){Bb;} 最佳答案 我的第一直觉是说VC++是正

c++ - 如果基类是成员函数的参数类型,是否需要指定基类的模板参数?

以下代码被VC++2013接受,但被clang3.4拒绝。哪个编译器符合C++标准?templatestructA{Tn;};templatestructB:A{//VC++2013:OK//clang:error:useofclasstemplate'A'requirestemplateargumentsB&f1(constA&obj){return*this;}//VC++:OK//clang:OKB&f2(constA&obj){return*this;}};intmain(){Bb;} 最佳答案 我的第一直觉是说VC++是正

c++ - 私有(private)继承隐藏基类,出现 "inaccessible within this context"错误

我遇到了类似于Privateinheritancerendersclassinaccessible中描述的问题当我尝试在派生类中声明基类的成员时,私有(private)继承的基类给出“在此上下文中不可访问”错误。在上述情况下,使用::X显式引用X是可行的,但如果代码位于以下函数中会怎样:voidfooby(){classX{};classY:privateX{};classZ:publicY{public:Xx;//Compiler"inaccessiblewithinthiscontext"error};};在这种情况下你如何引用X?如果fooby是一个结构/类,那么::fooby:

c++ - 私有(private)继承隐藏基类,出现 "inaccessible within this context"错误

我遇到了类似于Privateinheritancerendersclassinaccessible中描述的问题当我尝试在派生类中声明基类的成员时,私有(private)继承的基类给出“在此上下文中不可访问”错误。在上述情况下,使用::X显式引用X是可行的,但如果代码位于以下函数中会怎样:voidfooby(){classX{};classY:privateX{};classZ:publicY{public:Xx;//Compiler"inaccessiblewithinthiscontext"error};};在这种情况下你如何引用X?如果fooby是一个结构/类,那么::fooby:

c++ - 将删除与基类指针一起使用会导致内存泄漏吗?

给定两个类只有原始数据类型,没有自定义析构函数/释放器。C++规范是否保证它会以正确的大小释放?structA{intfoo;};structB:publicA{intbar[100000];};A*a=(A*)newB;deletea;我想知道我需要写一个空的virtualdtor吗?我已经尝试过g++和vc++2008,它们不会导致泄漏。但我想知道C++标准中什么是正确的。 最佳答案 除非基类析构函数是虚拟的,否则它是未定义的行为。见5.3.5/4:Ifthestatictypeoftheoperand[ofthedeleteo

c++ - 将删除与基类指针一起使用会导致内存泄漏吗?

给定两个类只有原始数据类型,没有自定义析构函数/释放器。C++规范是否保证它会以正确的大小释放?structA{intfoo;};structB:publicA{intbar[100000];};A*a=(A*)newB;deletea;我想知道我需要写一个空的virtualdtor吗?我已经尝试过g++和vc++2008,它们不会导致泄漏。但我想知道C++标准中什么是正确的。 最佳答案 除非基类析构函数是虚拟的,否则它是未定义的行为。见5.3.5/4:Ifthestatictypeoftheoperand[ofthedeleteo

c++ - 与智能指针(intrusive_ptr)一起使用的抽象基类-处理继承,多态性,可克隆性以及从工厂方法返回

要求我正在编写一个名为RCObject的类,它表示“引用计数对象”;RCObject类应该是抽象的,用作框架的基类(EC++3项目7);应该禁止在堆栈上创建RCObject子类的实例(MEC++1项目27);[添加:][假定Bear是RCObject的具体子类][这里的C.E.表示编译错误]Bearb1;//TriggersC.E.(byusingMEC++1Item27)Bear*b2;//NotallowedbutnowaytotriggerC.E.intrusive_ptrb3;//RecommendedBear*bs1=newBear[8];//TriggersC.E.cont

c++ - 与智能指针(intrusive_ptr)一起使用的抽象基类-处理继承,多态性,可克隆性以及从工厂方法返回

要求我正在编写一个名为RCObject的类,它表示“引用计数对象”;RCObject类应该是抽象的,用作框架的基类(EC++3项目7);应该禁止在堆栈上创建RCObject子类的实例(MEC++1项目27);[添加:][假定Bear是RCObject的具体子类][这里的C.E.表示编译错误]Bearb1;//TriggersC.E.(byusingMEC++1Item27)Bear*b2;//NotallowedbutnowaytotriggerC.E.intrusive_ptrb3;//RecommendedBear*bs1=newBear[8];//TriggersC.E.cont

c++ - 用函数指针调用虚成员函数的基类定义

我想使用成员函数指针调用虚函数的基类实现。classBase{public:virtualvoidfunc(){cout*fp)();//Derived::funcwillbecalled.//InmyapplicationIstorethepointerforlateruse,//soIcan'tsimplydoBase::func().}};在上面的代码中,func的派生类实现将从callFunc中调用。有没有办法可以保存指向Base::func的成员函数指针,或者我必须以某种方式使用using?在我的实际应用程序中,我使用boost::bind在callFunc中创建了一个boo